import authApi from '@/api/modules/auth';
import { useUserStore, useUserInfoStore, useBankCardStore, useLoanStore } from '@/store';
import router from '@/router';
import { nextTick } from 'vue';

const userStore = useUserStore();
const userInfoStore = useUserInfoStore();
const bankCardStore = useBankCardStore();
const loanStore = useLoanStore();

class AuthService {
    /**
     * 发送短信验证码
     * @param {string} phone 手机号
     * @param {number} type 验证码类型 1：注册 2：登录 3：重置密码   
     * @returns {Promise} 请求结果
     */
  async sendSmsCode(phone,type) {
    return await authApi.sendSmsCode({
      phone,
      type
    });
  }

  /**
   * 用户登录
   * @param {Object} loginData 登录数据
   * @returns {Promise<Object>} 登录结果
   */
  async login(loginData) {

    try {
      const response = await authApi.login(loginData);

      // 获取用户store并保存登录数据
      userStore.setLoginState(response);
      return response;
    } catch (error) {
      // 这里只处理特定于登录的业务错误，通用HTTP错误已在拦截器中处理
      throw error; // 重新抛出错误，让调用者决定如何处理UI反馈
    }
  }

  /**
   * 用户注册
   * @param {Object} registerData 注册数据
   * @returns {Promise<Object>} 注册结果
   */
  async register(registerData) {
    try {
      return await authApi.register(registerData);
    } catch (error) {
      throw error;
    }
  }

  /**
   * 重置密码
   * @param {Object} resetData 重置数据
   * @returns {Promise<Object>} 重置结果
   */
  async resetPasswordByPhone(resetData) {
    try {
      return await authApi.resetPasswordByPhone(resetData);
    } catch (error) {
      throw error;
    }
  }

  /**
   * 退出登录
   */
  async loginOut() {
    userStore.logout()
    userInfoStore.resetState()
    bankCardStore.resetState()
    loanStore.resetState()
    // 使用 nextTick 确保状态更新后再导航
    await nextTick()
    router.replace("/login")
  }

}

export default new AuthService();